package cn.edu.ctgu.experiment_3;

import java.util.Date;

/*
通话时间小于等于20分钟时，每分钟收费0.05美元，通话时间不足1分钟按1分钟计算。
通话时间大于20分钟时，收费1.00美元，外加超过20分钟的部分每分钟0.10美元；
不到1分钟按1分钟计算
 */

public class CalculateBill {
    /**
     * @param star 开始时间
     * @param over 结束时间
     * @param flag  0 表示未经历特殊时间点，1表示发生2:00调整为3:00，2表示发生2:59:59调整为2:00:00
     * @return  返回通话费用，返回 -1 表示输入有误
     */
    public float calculate(final Date star, final Date over, final int flag) {
        //计算未校准的通话时间秒数
        long disSec = (over.getTime() - star.getTime()) / Constant.KILO;
         // 处理特殊时间节点带来的误差
        if (flag == 1) {
            disSec -= Constant.SIXTY * Constant.SIXTY;
        } else if (flag == 2) {
            disSec += Constant.SIXTY * Constant.SIXTY - 1;
        } else if (flag != 0) {
            return -1;
        }
        //计算通话时间分钟数
        int disMin = (int) Math.ceil(disSec / Constant.SIXTY_F);
        //计算费用
        if (disMin < 0) {
            return -1;
        } else if (disMin <= Constant.AREA_ONE) {
            return Constant.AREA_ONE_PRICE * disMin;
        } else if (disMin <= Constant.AREA_TWO) {
            return 1 + Constant.AREA_TWO_PRICE * (disMin - Constant.AREA_ONE);
        } else {
            //没有超过30个小时的通话
            return -1;
        }
    }
}
